﻿#ifndef __SDL_PLATFORM_H__
#define __SDL_PLATFORM_H__

#include "../AF/AppFrame.h"

#include "SDL_Include.h"
#include "SDL_Define.h"

/// SDL图像引擎平台类
class SDL_CPlatform : public AF_CPlatform
{
public:
	SDL_CPlatform();
	~SDL_CPlatform();

public:
	// 平台函数
	/**
	 *  @name 平台函数
	 */
	bool			InitPlatform(AF_CBundle* pParam = NULL);
	bool			DestroyPlatform();

	// 窗口函数
	/**
	 *  @name 窗口函数
	 */
	AF_DWindowHandle	NewWindow(AF_SCreateWindow& cw);
	bool			ShowWindow(AF_DWindowHandle hWindow);
	bool			HideWindow(AF_DWindowHandle hWindow);
	void			FlipWindow(AF_DWindowHandle hWindow);
	bool			DeleteWindow(AF_DWindowHandle hWindow);
	void			SetWindowTitle(AF_DWindowHandle hWindow, _STRING strTitle);

	// 事件函数
	/**
	 *  @name 事件函数
	 */
	bool			GetEvent(AF_DWindowHandle hWindow, AF_SEvent& event);
	void			CleanEventBuffer(AF_DWindowHandle hWindow);

	// 画布函数
	/**
	 *  @name 画布函数
	 */
	AF_CCanvas*		CreateCanvas(AF_DWindowHandle hWindow);
	bool			DeleteCanvas(AF_CCanvas* pCanvas);

	// 图像函数
	/**
	 *  @name 图像函数
	 */
	AF_DImageHandle		CreateImage(
					const _STRING strPathName,
					UINT& _OUT nWidth,
					UINT& _OUT nHeight,
					AF_SImageInfo& _OUT ii
				);
	AF_DImageHandle		CreateImage(
					const void* pData,
					const SIZET nSize,
					UINT& _OUT nWidth,
					UINT& _OUT nHeight,
					AF_SImageInfo& _OUT ii
				);
	AF_DImageHandle		CreateImage(
					const UINT nWidth,
					const UINT nHeight,
					AF_SImageInfo& _OUT ii
				);
	bool			GetImageInfo(
					AF_DImageHandle hImage,
					UINT& _OUT nWidth,
					UINT& _OUT nHeight,
					AF_SImageInfo& _OUT ii
				);
	bool			DeleteImage(AF_DImageHandle hImage);

	// 音频函数
	/**
	 *  @name 音频函数
	 */
// 		AF_CAudio*		CreateAudio(AF_CBundle* pBundle = NULL);
// 		bool			PlayAudio(const _STRING strPathName, bool isLoop);
// 		void			DeleteAudio();

// 		// IO操作函数
// 		/**
// 		 *  @name IO操作函数
// 		 */

	// 其他平台功能函数
	/**
	 *  @name 其他平台功能函数
	 */
	AF_DTimeTicks		GetTimeTicks();
	void			Delay(AF_DTimeTicks ttSleep);

private:
	SDL_Surface*		SurfaceFormat(SDL_Surface* pSrc);

private:
	SDL_Surface*		m_pMainSurface;
};

#endif